#include <stdio.h>
int main() {
    char arr[5];
    arr[0] = '0'; // 正确
    // arr = "hello";// 报错

    char *p = arr;
    p[1] = '1';
    p = "hello"; // 正确

    char a1[] = "hello";
    // a1[0] = 'n'; //不可修改

    char *p1 = "hello";
    // p1[0] = 'n';// 不可修改
    printf("%s\n", p1);

    int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
    // 定义指针变量，指向一个长度为4的数组
    int(*p2)[4] = a;         // a的地址就是a[0]的地址，就是a[0][0]的地址
    printf("%zd\n", p2);     // 140701826931664 a[0]的地址
    printf("%zd\n", p2 + 1); // 140701826931680 a[1]的地址
    printf("%zd\n", p2 + 2); // 140701826931696 a[2]的地址
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            printf("%zd\t", *(p2 + i) + j);   // 取地址
            printf("%d\t", *(*(p2 + i) + j)); // 取值
        }
        printf("\n");
    }

    return 0;
}